การสร้าง CloudWatch Log เพื่อใช้งานใน EC2 บน AWS
How to start (เริ่มต้น)
ก่อนที่เราจะเริ่มต้นทำอะไรให้เราเลือก Region ที่อยู่ใกล้ประเทศเรามากที่สุดซึ่งในตัวอย่างของผมจะเป็น Singapore Region ซึ่งอยู่ใกล้กับประเทศไทยเรามากที่สุดครับ
IAM
เราจะเริ่มจากการสร้าง Role เพื่อมอบสิทธิ์การใช้งาน CloudWatch ให้อนุญาตเข้าถึงการทำงานของ EC2 และทำการเก็บข้อมูล Log ได้ครับ โดยการเข้าไปที่หน้าแรกของ IAM
และเลือกหัวข้อ Roles จากแถบเมนูด้านซ้าย ตามด้วยการกดปุ่ม Create role มุมขวาครับ เพื่อทำการสร้าง Role
ต่อมาเราจะพบกับหน้านี้ให้เราเลือกข้อมูลตามนี้
Trust Entity: AWS service
Usecase: EC2
และกด Next เพื่อไป Step ถัดไป
ให้เราค้นหา Policies ที่ชื่อว่า
CloudWatchLogsFullAccess
จากนั่นทำการติ้กเพื่อเลือกและกด Next ไปยังขั้นตอนถัดไป
ในขั้นตอนต่อไปจะเป็น Step สุดท้ายของการสร้าง Role นั้นคือการกำหนดชื่อ Role และแสดงข้อมูลที่เราเลือกไว้ทั้งหมดเพื่อตรวจสอบความถูกต้อง ในขั้นตอนนี้ให้เรากรอกชื่อ Role name ที่เราต้องการลงไป ซึ่งในตัวอย่างผมจะใช้ชื่อว่า chawish-test-ec2-role นะครับ
Role name: chawish-test-ec2-role (สามารถกำหนดเองได้)
ถ้าตรวจสอบข้อมูลถูกต้องทั้งหมดให้ทำกดปุ่ม Create role เพื่อทำการสร้าง role ได้เลยครับ
เมื่อสร้างเสร็จเราก็จะมาทำในส่วนของ Amazon EC2 กันต่อนะครับ
Amazon EC2
ในขั้นตอนแรกให้เราทำการสร้าง Key Pair ก่อนเลยเป็นอันดับแรกซึ่งขั้นตอนการทำนั้นสามารถดูได้จากลิ้งค์บล้อกด้านล่างนี้ได้เลย โดยเนื้อหาในลิ้งค์จะครอบคลุมการสร้าง Key pair,Instance และการเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม Putty ซึ่งทั้ง 3 อย่างนี้จำเป็นต่อการใช้งาน CloudWatch Log
วิธีติดตั้ง Amazon Linux บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTy
ซึ่งในตัวอย่างผมจะทำการตั้งค่าข้อมูลตามนี้ทั้งหมด
Name & Tags:
key->Name
Value->chawish-test
AMI: Amazon Linux 2 AMI(HVM) - Kernel 5.10, SSD Volumn Type
Instance type: t3a.nano
Key pair: chawish-test (เลือกประเภทไฟล์เป็น ppk)
Security group name: chawish-test
Inbound security groups rules:
Type->ssh
Source type->My IP*****หลังจากนี้จะเป็นเนื้อหาเพิ่มเติมที่ไม่อยู่ในลิ้งค์*****
ส่วนของ Advanced details ให้เราเลือก
IAM instance profile: chawish-test-ec2-role (ชื่อ role ที่เราสร้างในขั้นตอนแรก)
เมื่อตั้งค่าข้อมูลทั้งหมดเรียบร้อยแล้วให้กดปุ่ม Launch Instance ด้านล่างได้เลย
การติดตั้ง CloudWatch Log ลงในเซิร์ฟเวอร์
ซึ่งในตัวอย่างผมจะทำการติดตั้งผ่านโปรแกรม Putty นะครับ
เริ่มต้นด้วยการรันคำสั่งมอบสิทธิ์การใช้งานสูงสุดให้กับเราครับ
sudo su-
ตามด้วยคำสั่ง update ให้กับเซิร์ฟเวอร์ครับ
yum update -y
เมื่อเราทำการอัพเดทข้อมูลเซิร์ฟเวอร์แล้วคราวนี้ก็ทำการติดตั้ง awslogs สำหรับใช้งาน CloudWatch logs ลงในเซิร์ฟเวอร์ได้เลยครับ
yum install awslogs -y
จากนั้นให้เราตรวจสอบการติดตั้งดูนะครับโดยใช้คำสั่ง
less /var/log/messages
ซึ่งคำสั่งนี้จะเป็นการดู Log ของตัวเซิร์ฟเวอร์นะครับซึ่งเราสามารถดูได้หากมีการใช้งานบนระบบ Linux ครับ และเมื่อเรารันแล้วก็จะเห็นข้อความของระบบว่าขณะนี้เราได้ทำการติดตั้ง CloudWatch Log ลงในระบบเป็นที่เรียบร้อยแล้ว
ต่อมาให้เรารันคำสั่ง
tail -f /var/log/messages
เพื่อทำการดู Log flow นะครับ ซึ่งถ้าเราเปิดดูจะเห็นว่าเซิร์ฟเวอร์มีการทำงานอะไรบ้างแบบ real time เลย
และในขั้นตอนต่อไปเราจะทำการสร้าง Log group ใน CloudWatch กันนะครับ
การสร้าง Log group ของ CloudWatch
อันดับแรกให้เราเช็คก่อนว่ามี Log group ชื่อเดียวกับที่เราต้องการจะสร้างหรือไม่โดยไปที่หน้า CloudWatch และ เลือกหัวข้อ Log groups ครับ
คราวนี้ให้เรากลับมาที่ Putty และทำการรันคำสั่ง โดยในส่วนของ region ที่อยู่ในคำสั่งให้เราเลือก region ที่อยู่ใกล้กับประเทศเรามากที่สุดซึ่งในตัวอย่างผมจะเลือกเป็น ap-southeast-1 นะครับหรือก็คือ Region ของประเทศ Singapore นั้นเอง
aws logs create-log-group --region ap-southeast-1 --log-group-name "/chawish-test/var_log_messages"
โดยในคำสั่งจะแบ่งเป็นข้อมูล Region และชื่อของ log group นะครับ
--region: ap-southeast-1
--log-group-name: /chawish-test/var_log_messages
พอรันเสร็จให้เรากลับมาดูหน้า CloudWatch นะครับจะเห็นว่ามีชื่อ Log group ของเราขึ้นมาแล้ว
ซึ่งถ้าเราสังเกตข้อมูลในหัวข้อ Retention นะครับ จะเห็นว่าขึ้นเป็น Never expire หรือก็คือไม่มีวันหมดอายุนั้นเองเป็นค่ามาตรฐานทุกครั้งที่มีการสร้าง log group ครับ
แต่ในตัวอย่างผมจะทำการตั้งค่าให้ข้อมูล Log ของผมมีอายุการใช้งาน 30 วันครับ นั้นหมายความว่าเมื่อเวลาผ่านไป 30 วันข้อมูล Log นี้ก็จะหายไปครับ โดยใช้คำสั่ง
aws logs put-retention-policy --region ap-southeast-1 --log-group-name "/keisuke-test/var_log_messages" --retention-in-days 30
โดยในคำสั่งจะแบ่งเป็นข้อมูล Region ชื่อของ log group และระยะของ retention ครับ
--region: ap-southeast-1
--log-group-name: /chawish-test/var_log_messages
--retention-in-days: 30 (ในตัวอย่างผมจะตั้งค่าเป็น 30 วันนะครับ)
การสร้าง Log stream
และขั้นตอนถัดไปเราจะทำการสร้าง Log stream กันนะครับซึ่งจะเป็นตารางข้อมูลของระบบต่างๆแบบ real time ซึ่งเราจะสามารถเข้าไปดูได้ภายใน CloudWatch โดยไม่จำเป็นต้องรันคำสั่งแสดง Log ใน Putty อีกต่อไป
aws logs create-log-stream --region ap-southeast-1 --log-group-name "/chawish-test/var_log_messages" --log-stream-name i-02b566d14ae26f99c
โดยในคำสั่งจะแบ่งเป็นข้อมูล Region ชื่อของ log group และ id instance ใน EC2 ครับ
--region: ap-southeast-1
--log-group-name: /chawish-test/var_log_messages
--log-stream-name: i-02b566d14ae26f99c (ส่วนนี้คือ id instance ใน EC2 ของเราที่ต้องการจะดูข้อมูล Log ครับ)
สามารถดูได้จากหน้า Instance ที่อยู่ใน EC2 ครับ
ซึ่งถ้าคำสั่งเป็นไปได้ด้วยดี เราก็จะเห็นว่ามี Log stream ถูกสร้างขึ้นมาภายใน Log group ของเราเรียบร้อย
การตั้งค่า awslog และ awscli
ให้เรารันคำสั่งนี้ลงใน Putty
vi /etc/awslogs/awslogs.conf
และเลื่อนลงมาดูข้อมูลล่างสุดเพื่อทำการเปลี่ยนแปลง log_group_name ให้เป็นชื่อ log group ของเรา
การแก้ไขไฟล์ใน Linux ให้เรากด i เพื่อเข้าโหมด insert เราจะสามารถแก้ไขข้อมูลในไฟล์ได้
เมื่อแก้ไขเสร็จแล้วให้กด esc และ พิมคำสั่ง :x เพื่อบันทึกข้อมูลที่แก้ไขและออกจากไฟล์นั้น
และอันดับต่อไปให้เราไปแก้ไข region ในไฟล์ awscli โดยใช้คำสั่ง
vi /etc/awslogs/awscli.conf
เพื่อเปิดไฟล์และแก้ไขให้เป็น ap-southeast-1 ดังรูป
ต่อมาให้ทำการเปิดใช้งานและ restart awslog เพื่อเริ่มการทำงานใหม่ของระบบ log ครับ โดยใช้คำสั่งตามลำดับ
systemctl restart awslogsd
systemctl enable awslogsd
ซึ่งเราจะเห็นได้ว่าสถานะการทำงานตอนนี้คือ Active หมายความว่ามีการเปิดใช้งานเป็นที่เรียบร้อยแล้ว
ทดสอบการทำงาน CloudWatch Log
วิธีการทดสอบคือเราจะรันคำสั่ง log flow ในโปรแกรม Putty และดูว่าข้อมูลที่แสดงใน Putty นั้นเหมือนกันกับข้อมูลที่อยู่ใน Log stream หรือไม่ ถ้าข้อมูลแสดงเหมือนกันนั้นหมายความว่าเราได้ทำการสร้าง CloudWatch Log อย่างถูกต้องสมบูรณ์แล้วครับ
คราวนี้มาลอง Terminate instance ที่เราใช้งานกันบ้างและดูว่าข้อมูล Log ลองเราจะหายไปหรือไม่ ถ้าข้อมูลยังอยู่แสดงว่าเราทำการตั้งค่า CloudWatch ถูกต้องแล้ว
การ Filter ข้อมูลใน Log stream
โดยจะมีทั้งหมด 4 วิธีให้เราสามารถเลือกใช้งานกัน
Hot key filter
จะเป็นตัวเลือกที่ระบบสร้างมาให้เรากดใช้งาน Filter ได้เลยเพียงแค่คลิ้กโดยจะมีเงื่อนไขการ Filter พื้นฐาน
Absolute filter
เป็นการ filter ข้อมูลแบบกำหนดวันที่ ซึ่งเราสามารถเลือกได้เลยว่าต้องการจะดูข้อมูลจากวันที่เท่าไหร่ ถึง วันที่เท่าไหร่ ตามรูปครับ
Relative filter
จะเป็นการกำหนดเวลาและวันที่ข้อมูลย้อนหลังที่เราต้องการจะดู โดยสามารถกำหนดได้ตั้งแต่ระดับ นาที,ชั่วโมง,วัน และ สัปดาห์ ตามรูปครับ
Search bar filter
ส่วนนี้จะเป็นการกำหนดเนื้อหาที่เราต้องการจะดูข้อมูล Log ครับ จะมีวิธีการใช้งานดังรูปนี้เลย
จะสังเกตเห็นว่าเมื่อเราค้นหาแล้ว ข้อมูล log ที่แสดงทั้งหมดจะแสดงข้อมูลเฉพาะที่เราค้นหาเท่านั้น
ราคาและค่าใช้จ่าย
ในส่วนของราคาการใช้งาน CloudWatch Log นะครับ ถ้าเป็นการใช้งานใน Region ของ Singapore จะมีอัตราค่าใช้จ่ายอยู่ที่
รวบรวม (การนำเข้าข้อมูล) 0.70 USD ต่อ GB
จัดเก็บ (แบบถาวร) 0.03 USD ต่อ GB
วิเคราะห์ (คิวรี Logs Insights) 0.007 USD ต่อ GB ของข้อมูลที่สแกน
ทั้งนี้ข้อมูลราคาอาจจะมีการเปลี่ยนแปลงไปตามกาลเวลา ขอแนะนำให้ตรวจสอบในหน้าเว็บของ AWS เพื่อยืนยันความถูกต้องตามลิ้งค์ด้านล่างนี้ครับ
สรุป
สุดท้ายผมหวังว่าข้อมูลบล็อกในครั้งนี้จะมีส่วนช่วยให้ผู้ที่ต้องการศึกษาหรือใช้งาน CloudWatch Log ได้ดียิ่งขึ้นนะครับและขอขอบคุณเนื้อหาเพิ่มเติมที่มีส่วนช่วยในการเขียนบล็อกในครั้งนี้ได้แก่
AWS CLI คืออะไร? ขั้นตอนและวิธีใช้สำหรับมือใหม่ วิธีการใช้ S3 จาก EC2 และการใช้ AWS CLI S3 [ข้อควรระวัง] เกี่ยวกับการที่ Access Key หลุด(รั่วไหล) และถูกนำไปใช้โดยไม่ได้รับอนุญาต What is Amazon CloudWatch Logs?